﻿using System;
using System.Collections.Generic;
using System.IO.Ports;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace IP2Client
{
    class DataHandler
    {
        public List<Measurement> Measurements { get; set; }
        Timer timer;

        /// <summary>
        /// Constructor voor instantie's van de klasse DataHandeler
        /// </summary>
        /// <param name="timer">De timer die eventueel moet worden gestopt</param>
        public DataHandler(System.Windows.Forms.Timer timer)
        {
            Measurements = new List<Measurement>();
            this.timer = timer;
        }

        /// <summary>
        /// Methode verantwoordelijk voor het handelen van input van de serialport.
        /// Vereist mogelijk revisie.
        /// </summary>
        /// <param name="serialPort">De serialpoort waarnaar gekeken moet worden</param>
        /// <returns></returns>
        public void HandleInput(SerialPort serialPort)
        {
            string data = null;

            int heartBeats, rpm, power, energy, currentPower;
            double speed, distance;
            string time;

            try
            {
                serialPort.WriteLine("st");
                data = serialPort.ReadLine();
            }
            catch (Exception ex)
            {
                serialPort.Close();
                timer.Stop();
                MessageBox.Show(ex.Message);
                return;
            }

            if (data != "ERROR" & data != "ACK" && data != "ERROR")
            {
                string[] strSplitString = data.Split(null);

                //Kijk even of de string het aantal waarden bevat dat we willen hebben
                //Anders hebben we er geen zak aan = ignore
                if (strSplitString.Length >= 8)
                {
                    try
                    {
                        heartBeats = Convert.ToInt32(strSplitString[0]);
                        rpm = Convert.ToInt32(strSplitString[1]);
                        speed = Convert.ToDouble(strSplitString[2]) / 10.0;
                        distance = (Convert.ToDouble(strSplitString[3])) / 10.0;
                        power = Convert.ToInt32(strSplitString[4]);
                        energy = Convert.ToInt32(strSplitString[5]);
                        time = strSplitString[6];
                        currentPower = Convert.ToInt32(strSplitString[7]);

                        Measurement nieuweMeting = new Measurement(DateTime.Now, heartBeats, rpm, speed, distance, power, energy, time, currentPower);
                        Measurements.Add(nieuweMeting);
                    }
                    catch (FormatException)
                    {
                        return;
                    }
                }
            }
        }
    }
}
